package middle;

import sword.offer.common.ListNode;

/**
 * 给你两个非空 的链表，表示两个非负的整数。它们每位数字都是按照逆序的方式存储的，并且每个节点只能存储一位数字。
 *
 * 请你将两个数相加，并以相同形式返回一个表示和的链表。
 *
 * 你可以假设除了数字 0 之外，这两个数都不会以 0开头。
 *
 * 链接：https://leetcode-cn.com/problems/add-two-numbers
 * */
public class AddTwoNumbers {
    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode cur1 = l1;
            ListNode pre = null;
            ListNode cur2 = l2;
            int remainder = 0;
            while(cur1 != null && cur2 != null){
                int sum = cur1.val + cur2.val + remainder;
                remainder = (sum) / 10;
                cur1.val = sum % 10;
                pre = cur1;
                cur1 = cur1.next;
                cur2 = cur2.next;
            }

            if(pre != null && cur2 != null){
                pre.next = cur2;
                cur1 = pre.next;
            }
            while(cur1 != null){
                int sum = cur1.val + remainder;
                remainder = (sum) / 10;
                cur1.val = (sum) % 10;
                pre = cur1;
                cur1 = cur1.next;
            }
            if(remainder > 0){
                ListNode listNode = new ListNode(remainder);
                pre.next = listNode;
            }
            return l1;
        }
    }
}
